Firmware and software for both general-purpose and embedded computing systems continue to become more efficient over time. Even with the increased availability of faster microprocessor technology and higher-capacity memory components that software and firmware developers have enjoyed from year to year, the developers continue to devise data structures, processes, and other computer programming innovations to yield a code set that employs the existing hardware resources in a highly efficient manner while providing the functionality desired of the system. Such a software or firmware development strategy is especially beneficial in embedded computing systems, such as mobile communication devices, data storage systems, audio/video entertainment components, and many others, in which several tasks must be performed, often in real-time, and typically using hardware of some restricted capability or performance compared to many general-computing systems, such as personal computers.
To efficiently employ the computing system, developers typically structure the associated firmware and software in an attempt to exploit the maximum amount of parallelism available in the device to keep the processor busy performing significant work. To this end, the developer may configure the software to concurrently execute multiple processes, each with its own state information, to handle separate aspects of the system at the same time. Further, each process may employ one or more execution threads which share the state of the associated process while further exploiting parallelism available in the system.
To aid the development of such software or firmware, developers often employ an operating system, such as a real-time operating system, to automate the creation of the processes and threads, to facilitate communication therebetween, and perform other required operations. Developers may write their own operating system, or contract such a task to a third party, thus being able to tailor the operating system for the target device, but also bearing the responsibility of debugging and maintaining the operating system, as well as adding significant cost to the development effort. On the other hand, the developers may purchase a more general-purpose off-the-shelf operating system that has been well-tested over a period of time, but provides functionality that is not specifically targeted to the task at hand.